package agregacja;

import java.util.*;

import uslugi.*;

import baza.BazaDanych;

/*
 * 
 * Generuje ile kasy bylo na kontach banku wg lat
 */



public class SaldaGen {

	public static BazaDanych bd;
	
	private Vector<Konto> konta;
	private Vector<ZmianaSalda> zsV;
	
	// rok , SumaPieniedzy, Bilans
	private SortedMap<Integer, BilansRok> bilanse = new TreeMap<Integer,BilansRok> ();
	
	public SaldaGen(){
		
		podlaczDoBazy();
		
		konta = bd.stworzListe("konto");
		
		zsV = bd.stworzListe("zmianaSalda");
		
		
		
	zliczajKonta();

	zliczajZmianySalda();
	
	zliczajSumy();	
		
	}
	
	public Collection<BilansRok> getBilanse(){
		return bilanse.values();
	}
	
	private void zliczajKonta(){
		
		for(Konto k: konta){
			
			Date dataOtwarcia = k.getDataOtwarcia();
			Calendar calKonto = Calendar.getInstance();
			calKonto.setTime(dataOtwarcia);
			
			int rok = calKonto.get(Calendar.YEAR);
			
			if(bilanse.containsKey(rok)){
				
				BilansRok br = bilanse.get(rok);
				br.aktualizujBilans(k.getSaldoPocz());
				
			} else {
				bilanse.put(rok, new BilansRok(rok, (long)0, (long)k.getSaldoPocz()));
			}
			
			
		}
	}
	
	private void zliczajZmianySalda(){
		
		for(ZmianaSalda zs: zsV){
			
			Date data = zs.getData();
			Calendar calZs = Calendar.getInstance();
			calZs.setTime(data);
			
			int rok = calZs.get(Calendar.YEAR);
			
			if(bilanse.containsKey(rok)){
			
			BilansRok br = bilanse.get(rok);
			br.aktualizujBilans(zs.getKwotaZmiany());
			} else {
				bilanse.put(rok, new BilansRok(rok, (long)0, (long) zs.getKwotaZmiany()));
			}
		}
		
	}
	
	private void zliczajSumy(){
		
		
		int pierwszyRok = bilanse.firstKey();
		
		BilansRok pierwszyBilans = bilanse.get(pierwszyRok);
		
		pierwszyBilans.aktualizujSume(pierwszyBilans.getBilans());
		
		for(int rok = pierwszyRok; rok < 2012; rok++){
			
			BilansRok poprzedni = bilanse.get(rok);
			BilansRok aktualny = bilanse.get(rok + 1);
			
			aktualny.aktualizujSume(poprzedni.getSumaPieniedzy() + aktualny.getBilans());
			
		}
		
	}
	
	private static void podlaczDoBazy(){
		
		bd = new BazaDanych();
		bd.stworzListe("klient");
		
	}
	
	public static void main (String [] args){
		
		SaldaGen sg = new SaldaGen();
		
		Collection<BilansRok> coll = sg.getBilanse();
		
		for(BilansRok br: coll){
			System.out.println(br);
		}
		
	}
	
}
